#!/bin/bash

# 智能农业后端部署脚本
# 使用方法: ./deploy.sh [选项]
# 选项:
#   --build-only    只构建镜像，不启动服务
#   --start-only    只启动服务，不重新构建
#   --stop          停止所有服务
#   --restart       重启所有服务
#   --logs          查看日志
#   --clean         清理所有容器和镜像

set -e

# 颜色定义
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m' # No Color

# 日志函数
log_info() {
    echo -e "${BLUE}[INFO]${NC} $1"
}

log_success() {
    echo -e "${GREEN}[SUCCESS]${NC} $1"
}

log_warning() {
    echo -e "${YELLOW}[WARNING]${NC} $1"
}

log_error() {
    echo -e "${RED}[ERROR]${NC} $1"
}

# 检查 Docker 是否安装
check_docker() {
    if ! command -v docker &> /dev/null; then
        log_error "Docker 未安装，请先安装 Docker"
        exit 1
    fi
    
    if ! command -v docker-compose &> /dev/null; then
        log_error "Docker Compose 未安装，请先安装 Docker Compose"
        exit 1
    fi
}

# 构建镜像
build_image() {
    log_info "开始构建智能农业后端镜像..."
    docker-compose build --no-cache smart-agriculture-backend
    log_success "镜像构建完成"
}

# 启动服务
start_services() {
    log_info "启动智能农业服务..."
    docker-compose up -d
    log_success "服务启动完成"
    
    log_info "等待服务就绪..."
    sleep 30
    
    # 检查服务状态
    if docker-compose ps | grep -q "Up"; then
        log_success "服务运行正常"
        log_info "访问地址:"
        log_info "  - 后端 API: http://localhost:8080"
        log_info "  - API 文档: http://localhost:8080/swagger-ui.html"
        log_info "  - 健康检查: http://localhost:8080/actuator/health"
    else
        log_error "服务启动失败，请检查日志"
        docker-compose logs
    fi
}

# 停止服务
stop_services() {
    log_info "停止智能农业服务..."
    docker-compose down
    log_success "服务已停止"
}

# 重启服务
restart_services() {
    log_info "重启智能农业服务..."
    docker-compose restart
    log_success "服务已重启"
}

# 查看日志
show_logs() {
    log_info "显示服务日志..."
    docker-compose logs -f
}

# 清理资源
clean_resources() {
    log_warning "这将删除所有容器、镜像和数据卷，确定要继续吗? (y/N)"
    read -r response
    if [[ "$response" =~ ^([yY][eE][sS]|[yY])$ ]]; then
        log_info "清理资源..."
        docker-compose down -v --rmi all
        log_success "资源清理完成"
    else
        log_info "取消清理操作"
    fi
}

# 主函数
main() {
    check_docker
    
    case "${1:-}" in
        --build-only)
            build_image
            ;;
        --start-only)
            start_services
            ;;
        --stop)
            stop_services
            ;;
        --restart)
            restart_services
            ;;
        --logs)
            show_logs
            ;;
        --clean)
            clean_resources
            ;;
        "")
            log_info "开始完整部署..."
            build_image
            start_services
            ;;
        *)
            echo "使用方法: $0 [选项]"
            echo "选项:"
            echo "  --build-only    只构建镜像，不启动服务"
            echo "  --start-only    只启动服务，不重新构建"
            echo "  --stop          停止所有服务"
            echo "  --restart       重启所有服务"
            echo "  --logs          查看日志"
            echo "  --clean         清理所有容器和镜像"
            echo "  (无参数)        完整部署（构建+启动）"
            exit 1
            ;;
    esac
}

main "$@"
